package com.sunrise.configuracoes.bean;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import lombok.Getter;

import org.springframework.stereotype.Controller;

import com.sunrise.configuracoes.servico.ManterSituacaoTributariaService;
import com.sunrise.configuracoes.visao.SituacaoTributariaForm;
import com.sunrise.generico.bean.ManterBean;
import com.sunrise.generico.entidade.SituacaoTributaria;
import com.sunrise.generico.enums.TipoImposto;
import com.sunrise.generico.util.MessagesUtil;

@ManagedBean
@ViewScoped
@Controller
public class ManterSituacaoTributariaBean extends ManterBean<SituacaoTributaria> {


	@Resource
	@Getter
	private SituacaoTributariaForm formulario;

	@Resource
	@Getter
	private ManterSituacaoTributariaService situacaoTributariaService;

	@Override
	public void inicializarEntidade() {
		getFormulario().setTiposImposto(Arrays.asList(TipoImposto.values()));
		setEntidade(new SituacaoTributaria());
		getEntidade().setAtivo(Boolean.TRUE);
	}

	@Override
	public List<SituacaoTributaria> iniciarlizarListEntidade() {
		return new ArrayList<SituacaoTributaria>();
	}

	public String habilitar() {
		try {
			getEntidade().setAtivo(Boolean.TRUE);
			getService().alterar(getEntidade());
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroHabilitadoSucesso"));
			buscarPorFiltros();
			return getListar();
		} catch (Exception e) {
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroNaoHabilitado"));
			return null;
		}
	}

	public String desabilitar() {
		try {
			getEntidade().setAtivo(Boolean.FALSE);
			getService().alterar(getEntidade());
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroDesabilitadoSucesso"));
			buscarPorFiltros();
			return getListar();
		} catch (Exception e) {
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroNaoDesabilitado"));
			return null;
		}
	}

	public void buscarPorFiltros() {
		setEntidades(getSituacaoTributariaService().buscarPorFiltros(getFiltro()));
	}

	@Override
	public String salvar() {
		if (getEntidade().getPadrao()) {
			SituacaoTributaria sitTrib = getSituacaoTributariaService().buscarSituacaoPadrao(
					getEntidade().getTipoImposto());
			if(sitTrib != null){
				sitTrib.setPadrao(false);
				getService().alterar(sitTrib);
			}
		}
		getService().inserir(getEntidade());
		MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criadoSucesso"));
		buscarPorFiltros();
		return getListar();
	}

	@Override
	public String alterar() {
		if (getEntidade().getPadrao()) {
			SituacaoTributaria sitTrib = getSituacaoTributariaService().buscarSituacaoPadrao(
					getEntidade().getTipoImposto());
			if(sitTrib != null){
				sitTrib.setPadrao(false);
				getService().alterar(sitTrib);
			}
		}
		getService().alterar(getEntidade());
		MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("alteradoSucesso"));
		return getListar();
	}

	public void validarPadrao() {
		SituacaoTributaria sitTrib = getSituacaoTributariaService()
				.buscarSituacaoPadrao(getEntidade().getTipoImposto());
		if (sitTrib != null && getEntidade().getPadrao()) {
			StringBuilder sb = new StringBuilder(sitTrib.getCodigo());
			sb.append(" - ");
			sb.append(sitTrib.getNome());
			sb.append(" ");
			sb.append(MessagesUtil.getMessageKey("novaSituacaoPadrao"));
			sb.append(sitTrib.getTipoImposto().getLabel());
			sb.append(".");
			MessagesUtil.addNewInfoMessage(sb.toString());
		}
	}

}
